package com.example.controller.lifeTool;

import com.example.entity.RestBean;
import com.example.entity.dto.LifeTool.LifeTool;
import com.example.entity.dto.LifeTool.Relationship;
import com.example.entity.vo.request.life.DateRequestVO;
import com.example.entity.vo.request.life.MBIRequestVO;
import com.example.entity.vo.request.life.relationship.RelationshipRequestVO;
import com.example.entity.vo.response.life.DateResponseVO;
import com.example.entity.vo.response.life.MBIResponseVO;
import com.example.entity.vo.response.life.relationship.RelationshipResponseVO;
import com.example.service.LifeToolService;
import com.example.service.RelationshipService;
import jakarta.annotation.Resource;
import org.springframework.web.bind.annotation.*;

import java.util.List;

/**
 * 生活工具控制器
 *
 * @auth shanyue
 * @date 2025年07月08日20:23
 */
@RestController
@RequestMapping("/api/lifeTool")
public class LifeToolController {

    @Resource
    private LifeToolService lifeToolService;

    @Resource
    private RelationshipService relationshipService;

    /**
     * 获取生活工具列表
     *
     * @return 封装在RestBean中的工具列表数据
     */
    @GetMapping("/getLifeToolList")
    public RestBean<List<LifeTool>> getLifeToolList() {
        List<LifeTool> list = lifeToolService.list();
        return RestBean.success(list);
    }

    /**
     * 根据path获取指定生活工具详情
     *
     * @param path 工具路径
     * @return 工具详细信息，找不到返回404
     */
    @GetMapping("/getInfo")
    public RestBean<LifeTool> getLifeToolInfo(@RequestParam("path") String path) {
        LifeTool lifeTool = lifeToolService.getInfoByPath(path);
        if (lifeTool != null) {
            return RestBean.success(lifeTool);
        } else {
            return RestBean.failure(404, "找不到对应工具信息");
        }
    }

    /**
     * 获取所有支持的亲属关系词汇
     *
     * @return 封装在RestBean的亲属称呼词语列表
     */
    @PostMapping("/Relation")
    public RestBean<List<String>> getRelationList() {
        //从数据库中获取所有称呼记录
        List<Relationship> list = relationshipService.getRelationList();
        //提取称呼字符串字段
        List<String> relations = list.stream().map(Relationship::getRelation).toList();
        //返回封装好的成功响应
        return RestBean.success(relations);
    }

    /**
     * 根据用户输入的文本计算最终的称呼结果
     *
     * @param vo 请求体，包含用户输入的关系文本
     * @return 封装在RestBean的最终称呼结果
     */
    @PostMapping("/Relationship")
    public RestBean<RelationshipResponseVO> getRelationshipResult(@RequestBody RelationshipRequestVO vo) {
        //获取输入的原始文本
        String text = vo.getText();
        //调用服务层进行关系计算
        String result = relationshipService.calculateRelation(text);
        //构造响应VO对象
        RelationshipResponseVO resp = new RelationshipResponseVO();
        resp.setResult(result);
        //返回封装好的成功响应
        return RestBean.success(resp);
    }

    /**
     * 根据用户输入的身高和体重计算结果，MBI指数和健康结论
     *
     * @param requestVO 请求体，包含用户输入的身高和体重
     * @return 封装在RestBean的MBI计算结果
     */
    @PostMapping("/getMBIResult")
    public RestBean<MBIResponseVO> getMBIResult(@RequestBody MBIRequestVO requestVO) {
        MBIResponseVO result = lifeToolService.getMBIResult(requestVO);
        return RestBean.success(result);
    }

    /**
     * 计算两个日期之间的天数差
     *
     * @param requestVO 请求体，包含开始日期和结束日期，格式为YYYY-MM-DD
     * @return 封装在RestBean的天数差计算结果
     */
    @PostMapping("/getDateInterval")
    public RestBean<DateResponseVO> getDateInterval(@RequestBody DateRequestVO requestVO) {
        DateResponseVO result = lifeToolService.getDateInterval(requestVO);
        return RestBean.success(result);
    }

}
